package work.linruchang.util;

import cn.hutool.core.convert.ConverterRegistry;
import cn.hutool.core.util.TypeUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;

/**
 * 增强的类型、泛型处理工具
 *
 * @author LinRuChang
 * @version 1.0
 * @date 2022/01/18
 * @since 1.8
 **/
public class EnhanceTypeUtil extends TypeUtil {


    /**
     * 值转换
     * <p>
     * 支持字符串转基本类型的包装 == 自带
     * 支持逗号分割的字符串 转 集合 == 自带
     * 支持Map 转 Bean == 自带
     * 支持json字符串 转 对象 == 增强
     *
     * @param targetClazz 目标类型
     * @param value       值
     * @return
     */
    public static <T> T convertValue(Class<T> targetClazz, Object value) {
        ConverterRegistry converterRegistry = ConverterRegistry.getInstance();
        T convert = converterRegistry.convert(targetClazz, value);
        if (convert == null) {
            try {
                // value是JSON
                if (JSONUtil.isTypeJSON(value.toString())) {
                    convert = JSON.parseObject(value.toString(), targetClazz);
                    // convert = JSONUtil.toBean(value.toString(),targetClazz);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return convert;
    }


}
